#include <bd.h>

BD::BD() : BANCOPG(CONF)
	{
	acao = 0;
	tabelas.clear();
	campos.clear();
	valores.clear();
	resultados.clear();
	}

BD::~BD()
	{
	}

void BD::acionar()
	{
	switch(acao)
		{
		case 1:
			{
			selecionar();
			break;
			}
		case 2:
			{
			inserir();
			break;
			}	
		case 3:
			{
			atualizar();
			break;
			}
		case 4:
			{
			deletar();
			break;
			}
		case 5:
			{
			preparar();
			break;
			}
		case 6:
			{
			executa();
			break;
			}
		}
	}

void BD::selecionar()
	{
	string SQL, AUX;
	vector<string> VAUX;
	char *sql;
	int j;

	SQL.clear();
	SQL = "select ";
	for (i = campos.begin(), j=0;i != campos.end(); i++, j++)
		{
		if (j > 0)
			{
			SQL += ",";
			}
		AUX = *i;
		SQL += AUX;
		}
	SQL += " from ";
	for (i = tabelas.begin();i != tabelas.end(); i++)
		{
		AUX = *i;
		SQL += AUX;
		}
	for (i = valores.begin();i != valores.end(); i++)
		{
		AUX = *i;
		SQL += AUX;
		}
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
//	cout << sql << endl;
	executar(sql);
	if (query_result != 3)
		{
		if (registros > 0)
			{
			resultado();
			resultou.clear();
			resultou = resultados;
			}
		else
			{
			resultou.clear();
			VAUX.clear();
			AUX.clear();
			AUX = "Quantidade de Registros 0";
			VAUX.push_back (AUX);
			resultou.push_back (VAUX);
			}
		}
	else
		{
		resultou.clear();
		VAUX.clear();
		AUX.clear();
		AUX = "Erro de Execução";
		VAUX.push_back (AUX);
		VAUX.push_back (mensagem);
		resultou.push_back (VAUX);
		}
	}

void BD::inserir()
	{
	string SQL, AUX;
	vector<string> VAUX;
	char *sql;
	int j;

	SQL.clear();
	SQL = "insert into ";
	for (i = tabelas.begin();i != tabelas.end(); i++)
		{
		AUX = *i;
		SQL += AUX;
		}
	SQL += "(";
	for (i = campos.begin(), j=0;i != campos.end(); i++, j++)
		{
		if (j > 0)
			{
			SQL += ",";
			}
		AUX = *i;
		SQL += AUX;
		}
	SQL += " values (";
	for (i = valores.begin(), j=0;i != valores.end(); i++,j++)
		{
		if (j > 0)
			{
			SQL += ",";
			}
		AUX = *i;
		SQL += AUX;
		}
	SQL += ");";
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	cout << sql << endl;
	/*executar(sql);
	if (query_result != 3)
		{
		if (registros > 0)
			{
			resultado();
			resultou.clear();
			resultou = resultados;
			}
		else
			{
			resultou.clear();
			VAUX.clear();
			AUX.clear();
			AUX = "Executado sem retorno";
			VAUX.push_back (AUX);
			resultou.push_back (VAUX);
			}
		}
	else
		{
		resultou.clear();
		VAUX.clear();
		AUX.clear();
		AUX = "Erro de Execução";
		VAUX.push_back (AUX);
		VAUX.push_back (mensagem);
		resultou.push_back (VAUX);
		}*/
	}

void BD::deletar()
	{
	string SQL, AUX;
	vector<string> VAUX;
	char *sql;
	int j;

	SQL.clear();
	SQL = "delete from ";
	for (i = tabelas.begin();i != tabelas.end(); i++)
		{
		AUX = *i;
		SQL += AUX;
		}
	SQL += " where ";
	for (i = valores.begin(),j=0;i != valores.end(); i++,j++)
		{
		if (j > 0)
			{
			SQL += " and ";
			}
		AUX = *i;
		SQL += AUX;
		}
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	cout << sql << endl;
	executar(sql);
	if (query_result != 3)
		{
		if (registros > 0)
			{
			resultado();
			resultou.clear();
			resultou = resultados;
			}
		else
			{
			resultou.clear();
			VAUX.clear();
			AUX.clear();
			AUX = "Quantidade de Registros 0";
			VAUX.push_back (AUX);
			resultou.push_back (VAUX);
			}
		}
	else
		{
		resultou.clear();
		VAUX.clear();
		AUX.clear();
		AUX = "Erro de Execução";
		VAUX.push_back (AUX);
		VAUX.push_back (mensagem);
		resultou.push_back (VAUX);
		}
	}

void BD::preparar()
	{
	string SQL;
	vector<string> VAUX;
	char *sql;
	
	SQL.clear();
	SQL = campos.at(0);
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	cout << sql << endl;
	executar(sql);
	if (query_result != 3)
		{
		resultou.clear();
		SQL.clear();
		SQL = "Quantidade de Registros 0";
		VAUX.push_back (SQL);
		resultou.push_back (VAUX);
		}
	else
		{
		resultou.clear();
		VAUX.clear();
		SQL.clear();
		SQL = "Erro de Execução";
		VAUX.push_back (SQL);
		VAUX.push_back (mensagem);
		resultou.push_back (VAUX);
		}
	}

void BD::executa()
	{
	string SQL, AUX;
	vector<string> VAUX;
	char *sql;

	SQL.clear();
	SQL = campos.at(0);
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	cout << sql << endl;
	executar(sql);
	if (query_result != 3)
		{
		if (registros > 0)
			{
			resultado();
			resultou.clear();
			resultou = resultados;
			}
		else
			{
			resultou.clear();
			VAUX.clear();
			AUX.clear();
			AUX = "Quantidade de Registros 0";
			VAUX.push_back (AUX);
			resultou.push_back (VAUX);
			}
		}
	else
		{
		resultou.clear();
		VAUX.clear();
		AUX.clear();
		AUX = "Erro de Execução";
		VAUX.push_back (AUX);
		VAUX.push_back (mensagem);
		resultou.push_back (VAUX);
		}
	}

void BD::atualizar()
	{
	string SQL, AUX;
	vector<string> VAUX;
	char *sql;
	int j;

	SQL.clear();
	SQL = "update ";
	for (i = tabelas.begin();i != tabelas.end(); i++)
		{
		AUX = *i;
		SQL += AUX;
		}
	SQL += " set ";
	for (i = campos.begin(),j=0;i != campos.end(); i++,j++)
		{
		if (j > 0)
			{
			SQL += ",";
			}
		AUX = *i;
		SQL += AUX;
		}
	SQL += " where ";
	for (i = valores.begin(),j=0;i != valores.end(); i++,j++)
		{
		if (j > 0)
			{
			SQL += " and ";
			}
		AUX = *i;
		SQL += AUX;
		}
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	cout << sql << endl;
	/*executar(sql);
	if (query_result != 3)
		{
		if (registros > 0)
			{
			resultado();
			resultou.clear();
			resultou = resultados;
			}
		else
			{
			resultou.clear();
			VAUX.clear();
			AUX.clear();
			AUX = "Quantidade de Registros 0";
			VAUX.push_back (AUX);
			resultou.push_back (VAUX);
			}
		}
	else
		{
		resultou.clear();
		VAUX.clear();
		AUX.clear();
		AUX = "Erro de Execução";
		VAUX.push_back (AUX);
		VAUX.push_back (mensagem);
		resultou.push_back (VAUX);
		}*/
	}